package com.ahorresas.controllers;

import com.ahorresas.modelo.daos.PersonaDao;
import com.ahorresas.modelo.daos.UsuarioDao;
import com.ahorresas.modelo.beans.PersonaBean;
import com.ahorresas.modelo.beans.UsuarioBean;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UsuarioController extends HttpServlet {
    
    private final UsuarioDao usuarioDao = new UsuarioDao();
    private final PersonaDao personaDao = new PersonaDao();
    private String identificacion;
    private String usuario;
    private String clave;
    private String perfil;
    private int resultado;
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        /*Control del boton accionado desde la página JSP*/
        String accion = request.getParameter("accion");
        if(accion == null)
            accion = "";
        
        identificacion = request.getParameter("identificacion");
        usuario = request.getParameter("usuario");
        clave = request.getParameter("clave");
        perfil = request.getParameter("perfil");
        
        UsuarioBean usu = null;
        String validacion = "";
        resultado = 0;
        
        switch (accion) {
            case "consultar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    usu = usuarioDao.buscarUsuario(identificacion, false);
                    if(usuario != null){
                        llenarCampos(request, usu);
                        request.setAttribute("msg", "El usuario fué encontrado con éxito");
                    }else{
                        mantenerDatos(request);
                        request.setAttribute("msg", "El usuario no pudo ser encontrado");
                    }
                }
                break;
            case "guardar":
                validacion = obligatorios(true);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    PersonaBean persona = personaDao.buscarPersona(identificacion);
                    if(persona != null){
                        usu = usuarioDao.buscarUsuario(identificacion, false);
                        if(usu != null){
                            usu.setNombre(usuario);
                            usu.setClave(clave);
                            usu.setPerfil(Integer.parseInt(perfil));

                            resultado = usuarioDao.modificarUsuario(usu);
                        } else {
                            usu = new UsuarioBean();
                            usu.setIdentificacion(identificacion);
                            usu.setNombre(usuario);
                            usu.setClave(clave);
                            usu.setPerfil(Integer.parseInt(perfil));
                            System.out.println("Perfil"+perfil);
                            resultado = usuarioDao.crearUsuarios(usu);
                        }
                        if(resultado == 1){
                            llenarCampos(request, null);
                            request.setAttribute("msg", "El Usuario fué guardado con éxito.");
                        } else {
                            mantenerDatos(request);
                            request.setAttribute("msg", "El usuario no pudo ser guardado.");
                        }
                    } else {
                        mantenerDatos(request);
                        request.setAttribute("msg", "El usuario a crear no ha sido registrado como persona.");
                    }
                }
                break;
            case "eliminar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    resultado = usuarioDao.eliminarUsuario(identificacion);
                    if(resultado == 1){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El usuario fué eliminado con éxito");
                    } else {
                        mantenerDatos(request);
                        request.setAttribute("msg", "El usuario no pudo ser eliminado.");
                    }
                }
                break;
            case "listar":
                List<UsuarioBean> listaUsuarios = usuarioDao.listarUsuarios();
                request.setAttribute("lista", listaUsuarios);
                break;
        }
        request.getRequestDispatcher("./jsp/usuario.jsp").forward(request, response);
    }
    
    public void llenarCampos(HttpServletRequest request, UsuarioBean usuario){
        request.setAttribute("identificacion", usuario != null ? usuario.getIdentificacion(): "");
        request.setAttribute("usuario", usuario != null ? usuario.getNombre() : "");
        request.setAttribute("clave", usuario != null ? usuario.getClave(): "");
        request.setAttribute("perfil", usuario != null ? usuario.getPerfil(): "");
    }
    
    public void mantenerDatos(HttpServletRequest request){
        request.setAttribute("identificacion", identificacion != null ? identificacion : "");
        request.setAttribute("usuario", usuario != null ? usuario : "");
        request.setAttribute("clave", clave != null ? clave : "");
        request.setAttribute("perfil", perfil != null ? perfil : "");
    }
    
    public String obligatorios(boolean guardado){
        StringBuilder resultado = new StringBuilder();
        if(identificacion == null || identificacion.equals(""))
            resultado.append("El campo 'Documento' no debe estar vacío. <br>");
        else {
            try {
                Integer.valueOf(identificacion);
            } catch (NumberFormatException e) {
                resultado.append("El campo 'Identificación' debe ser numérico. <br>");
            }
        }
        
        if(!guardado) return resultado.toString();
        
        if(usuario == null || usuario.equals(""))
            resultado.append("El campo 'Usuario' no debe estar vacío. <br>");
        
        if(clave == null || clave.equals(""))
            resultado.append("El campo 'Contraseña' no debe estar vacío. <br>");
        
        if(perfil == null || perfil.equals("0"))
            resultado.append("Debe seleccionar una de las opciones de 'Perfil'. <br>");
        return resultado.toString();
    }
}
